package com.fraud.controller;

import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;

import com.fraud.bean.FileCollectorBean;
import com.fraud.bean.FileProcessBean;
import com.fraud.dao.KullaniciDao;
import com.fraud.dao.SubeDao;
import com.fraud.model.entity.Sube;
import com.fraud.model.entity.Sube;

@ManagedBean(name = "islemController")
public class IslemController {

	private int subeId;

	private Date islemTarihi;

	@EJB
	FileCollectorBean fileCollectorBean;

	@EJB
	FileProcessBean fileProcessorBean;

	@EJB
	KullaniciDao userDao;

	private String message;

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public Date getIslemTarihi() {
		return islemTarihi;
	}

	public void setIslemTarihi(Date islemTarihi) {
		this.islemTarihi = islemTarihi;
	}

	public int getSubeId() {
		return subeId;
	}

	public void setSubeId(int subeId) {
		this.subeId = subeId;
	}

	@EJB
	SubeDao subeDao;

	@PostConstruct
	public void init() {
		try {

		} catch (Exception e) {
			System.out.println(e);
		}
	}

	public String goToPage() {
		return "both/" + "dosyaIslem" + "?faces-redirect=true";
	}

	public String goToList() {
		return "/mainPage?faces-redirect=true";
	}

	public Map<String, Object> getSubeList() {
		LinkedHashMap<String, Object> list = new LinkedHashMap<String, Object>();

		List<Sube> suberler = subeDao.getAllSubes();
		for (Iterator iterator = suberler.iterator(); iterator.hasNext();) {
			Sube sube = (Sube) iterator.next();
			list.put(sube.getSubeAdi(), sube.getId()); // label, value
		}

		return list;

	}

	// public void processFile(EventLog eventLog) {
	//
	// Sube sube = eventLog.getSube();
	// FacesContext context = FacesContext.getCurrentInstance();
	//
	// boolean isSuccess = fileCollectorBean.collectSubeFile(sube,
	// eventLog.getDosyaTarihi(), userDao.loginUser());
	//
	// if (!isSuccess) {
	// context.addMessage(null, new FacesMessage("Hata",
	// "Şubeden dosya transfer işleminde hata oluştu."));
	// return;
	// }
	//
	// try {
	// fileProcessorBean.processFile(sube, eventLog.getDosyaTarihi());
	// context.addMessage(null, new FacesMessage("Hata",
	// "İşleminiz başarı ile tamamlandı."));
	// } catch (Exception e) {
	// context.addMessage(null, new FacesMessage("Hata",
	// "Şubeden alınan dosyanın işlenmesinde hata oluştu."));
	// }
	// ;
	//
	// }

	public void collectAllSube() {
		fileCollectorBean.collectFiles(islemTarihi, userDao.loginUser());

		FacesContext context = FacesContext.getCurrentInstance();

		context.addMessage(null, new FacesMessage("Uyarı",
				"Belirtilen tarih için dosyalar şubelerden toplandı."));
		return;

	}
	
	public void processAllFiles() {
		
		fileProcessorBean.processFiles(userDao.loginUser());
		

		FacesContext context = FacesContext.getCurrentInstance();

		context.addMessage(null, new FacesMessage("Uyarı",
				"Dosya işleme işlemi tamamlandı."));
		return;

	}
	
	

	public void processFile() {

		FacesContext context = FacesContext.getCurrentInstance();
		Sube sube = null;
		try {
			sube = subeDao.getSube(getSubeId());
		} catch (Exception e) {
			context.addMessage(null, new FacesMessage("Hata",
					"Uygun Şube Bulunamadı"));
			return;
		}

		boolean isSuccess = fileCollectorBean.collectSubeFile(sube,
				islemTarihi, userDao.loginUser());

		if (!isSuccess) {
			context.addMessage(null, new FacesMessage("Hata",
					"Şubeden dosya transfer işleminde hata oluştu."));
			return;
		}

		try {
			fileProcessorBean.processFile(sube, islemTarihi,userDao.loginUser());
			context.addMessage(null, new FacesMessage("Uyarı",
					"İşleminiz başarı ile tamamlandı."));
		} catch (Exception e) {
			context.addMessage(null, new FacesMessage("Hata",
					"Şubeden alınan dosyanın işlenmesinde hata oluştu."));
		}

	}

}